package sicnu.cs.ich.ich.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import sicnu.cs.ich.api.domain.dto.*;
import sicnu.cs.ich.api.domain.entity.Ich;
import sicnu.cs.ich.api.domain.entity.IchProvince;
import sicnu.cs.ich.api.domain.form.IchForm;
import sicnu.cs.ich.api.domain.form.IchQueryParam;
import sicnu.cs.ich.api.domain.vo.AdminIchVo;

import java.util.List;

/**
 * @author sy
 */
@Mapper
public interface IchMapper extends BaseMapper<Ich> {
    /**
     * 获取各省的非遗数量
     *
     * @return 各省非遗列表
     */
    List<IchProvinceDTO> listIchByProvince();

    /**
     * 获取各市的非遗数量
     *
     * @return 各市非遗列表
     */
    List<IchCityDTO> listIchByCity(Integer province);

    /**
     * 获取指定type下size个非遗数量
     *
     * @param typeId 类型
     * @param size   数量
     * @return 列表
     */
    List<IchDTO> selectIchsByType(@Param("typeId") Integer typeId, @Param("province") Integer province);

    /**
     * 传入List列表获取非遗单品
     */
    List<Ich> selectByIds(@Param("ids") List<Integer> ids);

    /**
     * 获取省信息
     *
     * @param province 省id
     */
    IchProvince selectIchProvince(Integer province);

    /**
     * 所有省
     */
    IchProvinceDTO selectProvinceDTO(Integer province);

    /**
     * 根据省id和类型id获取下面的热度榜
     *
     * @param province 省id
     * @param typeId   类型id
     */
    List<IchHotDTO> selectProvinceTypeHotIch(@Param("province") Integer province, @Param("typeId") Integer typeId);

    /**
     * 插入收场
     */
    int insertFavoriteIch(@Param("userId") Integer userId, @Param("ichId") Integer ichId);

    /**
     * 获取
     *
     * @param userId 用户id
     */
    List<IchDTO> selectFavorite(Integer userId);

    /**
     * 删除收藏
     *
     * @param userId 用户id
     * @param ichId  非遗id
     */
    int deleteFavoriteIch(@Param("userId") Integer userId, @Param("ichId") Integer ichId);

    int countFavorite(@Param("userId") Integer userId, @Param("ichId") Integer ichId);

    int selectIchLikingById(Integer ichId);

    /**
     * 按类型获取相似非遗（同类型，同省）
     * @param ichId 非遗id
     * @return 类型相似的非遗
     */
    List<IchDTO> findTypeSimilarIchsById(@Param("ichId")Integer ichId,@Param("typeId") Integer typeId,@Param("province")Integer province);

    /**
     * 获取所有id
     */
    List<Integer> selectAllId();

    /**
     * 获取省级非遗排行榜的数据
     */
    List<IchHotDTO> selectProvinceIchHotDTO(@Param("province") String province,@Param("num") int num);

    Integer countIchById(@Param("id")Integer ichId);

    /**
     * 获取非遗详情
     * @param id 非遗id
     */
    AdminIchVo findAdminIchVoById(Integer id);

    List<IchDTO> selectIchDTO(IchQueryParam param);

    /**
     * 查询非遗是否存在
     */
    int selectCountByIchId(Integer ichId);

    /**
     * 新增非遗
     */
    int insert(IchForm ichForm);

    /**
     * 上传非遗图片
     */
    int insertIchImage(@Param("ichId") Integer ichId, @Param("keys") List<String> keys);
}